package club.kingyin.easycache.method.core;

import club.kingyin.easycache.component.CachePostProcess;
import club.kingyin.easycache.key.InvokePostProcess;
import club.kingyin.easycache.method.CacheMethod;

// 从这里开始踏入不平凡
public interface Lifecycle {

    /**
     * 在缓存生命周期中获取所需的后续增强处理器
     *
     *                               执行链决定跳过与否
     *                              _________________
     *                             |                |
     * 在调用Invoke方法后 [before]-[pre]-[setCache]-[after]
     *
     * @return 后续增强处理器
     */
    CachePostProcess[] getCachePostProcessor();

    /**
     * 在缓存生命周期中获取所需的前置增强处理器
     * 在调用Invoke过程中 首先分为创建 [EasyCacheKey] 和 [getCache] 两部分
     * 系统在getCache中决定是否调用Invoke。
     *                                                  执行链决定跳过与否
     *                                                ___________________
     *                                               |                  |
     * 其增强过程为 [before]-[easyCacheKey]-[after]-[before]-[getCache]-[after]
     * @return 前置增强处理器
     */
    InvokePostProcess<CacheMethod>[] getInvokePostProcessor();
}
